﻿//题目描述
//儿童节那天有K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。
//小明一共有N 块巧克力，其中第i 块是𝐻𝑖×𝑊𝑖​的方格组成的长方形。
//为了公平起见，小明需要从这N 块巧克力中切出K 块巧克力分给小朋友们。切出的巧克力需要满足：
//形状是正方形，边长是整数。
//大小相同。
//例如一块6×5 的巧克力可以切出6 块2×2 的巧克力或者2 块3×3 的巧克力。
//当然小朋友们都希望得到的巧克力尽可能大，你能帮小𝐻𝑖​
//计算出最大的边长是多少么？
//输入格式
//第一行包含两个整数N 和K。(1≤N, K≤10^5)。
//以下N 行每行包含两个整数𝐻𝑖和𝑊𝑖。(1≤𝐻𝑖,𝑊𝑖≤10^5)
//输入保证每位小朋友至少能获得一块1×1 的巧克力
//输出格式
//输出切出的正方形巧克力最大可能的边长。
//输入输出样例
//输入 
//2 10
//6 5
//5 6
//输出 
//2
//这是一道二分题，由题可得，第i块巧克力可以分成边长为x的(a[i] / x) * (b[i] / x)块巧克力，
// 所以只需判断n块巧克力分成以x为边长的巧克力的个数是否大于k，若大于等于k，则可以，否则不可以
//而x的取值可以用二分来查找
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 9;
int n, k, a[N], b[N];
bool solve(int x) {
	int sum = 0;
	for (int i = 1; i <= n; i++) {
		sum += (a[i] / x) * (b[i] / x);
	}
	return sum >= k;
}
int main() {
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	 cin >> n >> k;
	 for (int i = 1; i <= n; i++)cin >> a[i] >>b[i];
	 int l = 0, r = 1e5;
	 while (l + 1 < r) {
		 int mid = (l + r) / 2;
		 if (solve(mid))l = mid;
		 else
			 r = mid;
	 }
	 cout << l ;
	return 0;
}